package main

import "fmt"

func max(numbers ...int) (int, int) {
	maxi := -1
	maxValue := -1
	for i, v := range numbers {
		if v > maxValue {
			maxi, maxValue = i, v
		}
	}
	return maxi, maxValue
}

func printArray(arr [5]int) {
	// 长度不一样go会认为是不一样的数据类型
	arr[0] = 100 // 改变数组第一个元素的值，观察函数内外打印是否一致
	for i, v := range arr {
		fmt.Println(i, v)
	}
}

func printArrayPtr(arr *[5]int) {
	// 长度不一样go会认为是不一样的数据类型
	arr[0] = 100 // 改变数组第一个元素的值，观察函数内外打印是否一致
	for i, v := range arr {
		fmt.Println(i, v)
	}
}

func main() {
	// 数组数量写在类型的前面
	var arr1 [5]int
	arr2 := [3]int{1, 3, 5}
	arr3 := [...]int{2, 4, 6, 8, 10} // 编译器自动识别数组数量
	var grid [4][5]int               // 4行5列的int数组
	fmt.Println(arr1, arr2, arr3, grid)

	// 数组的遍历
	for i := 0; i < len(arr3); i++ {
		fmt.Println(arr3[i])
	}

	for i := range arr3 {
		// range关键字获得数组的下标, 取到元素
		fmt.Println(arr3[i])
	}

	for i, v := range arr3 {
		// range关键字获得数组的下标, range关键字可以获得下标和元素值
		fmt.Println(i, v)
	}

	for _, v := range arr3 {
		// 只获取值不要下标
		fmt.Println(v)
	}
	fmt.Println(max(1, 2, 3, 5, 7, 4))
	fmt.Println("printArray(arr1)")
	printArray(arr1) // 数组是值类型，在函数调用时，是将数组进行复制操作的。
	fmt.Println("printArray(arr1)")
	printArray(arr3)
	fmt.Println("arr1 and arr3")
	fmt.Println(arr1, arr3)
	fmt.Println("printArrayPtr(arr1)")
	printArrayPtr(&arr1)
	fmt.Println("printArrayPtr(arr3)")
	printArrayPtr(&arr3)
	fmt.Println("arr1 and arr3")
	fmt.Println(arr1, arr3)
}
